package com.wf.day_0612.test3;

import java.util.List;
import java.util.Random;
import java.util.concurrent.CopyOnWriteArrayList;

/**
 * @author mpk
 * @since 2024/6/12 17:23:10
 */
/*4.请按如下要求编写多线程程序：
        1.得到一个随机的整数n，创建n个子线程对象；
        2.要求在子线程中把当前线程的名称作为元素添加一个集合中；
        3.当n个线程的名称都添加到集合中，遍历集合打印每个线程的名称；*/
public class Demo {

    public static void main(String[] args) throws InterruptedException {

        // 记录程序开始时间
        long startTime = System.nanoTime();



        List<String> list = new CopyOnWriteArrayList<>();
        int n = new Random().nextInt(100);

        Thread[] threads = new Thread[n];


        for (int i = 0; i < n; i++) {
            threads[i] = new Thread(() -> list.add(Thread.currentThread().getName()), "线程" + i);
        }

        for (int i = 0; i < n; i++) {
            threads[i].start();
        }

        for (int i = 0; i < n; i++) {
            threads[i].join();
        }

        System.out.println(n);
        System.out.println(list);
        System.out.println(list.size() == n);
        // 记录程序结束时间
        long endTime = System.nanoTime();
        // 计算程序运行时间（以毫秒为单位）
        long durationInNano = endTime - startTime;
        double durationInMilli = (double) durationInNano / 1_000_000; // 将纳秒转换为毫秒

        System.out.println("程序运行时间： " + durationInMilli + " 毫秒");

    }


}



